//package com.lr.transfer.utils;
//
//import org.apache.commons.lang3.StringUtils;
//import org.artofsolving.jodconverter.OfficeDocumentConverter;
//import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
//import org.artofsolving.jodconverter.office.OfficeManager;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//import java.io.File;
//import java.util.List;
//import java.util.concurrent.locks.Lock;
//import java.util.concurrent.locks.ReentrantLock;
//import java.util.regex.Pattern;
//
///**
// * FileName: OfficeToPdfUtil
// * author:   zhangguoqing
// * Date:     2018/9/19 9:18
// * 说明:  word文件转换成pdf文件(必须安装Openoffice)
// */
//@Component
//public class OfficeToPdfUtil {
//
//    @PostConstruct
//    public void init() throws Exception {
//        DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
//        // 设置OpenOffice.org 3的安装目录
//        config.setOfficeHome(getOfficeHome());
//        // 启动OpenOffice的服务
//        OfficeManager getOfficeManager = config.buildOfficeManager();
//        try {
//            getOfficeManager.start();
//            logger.info("已经尝试启动过  正常");
//        } finally {
//            getOfficeManager.stop();
//            logger.info("已经尝试停止，正常");
//        }
//    }
//
//    private static Logger logger = LoggerFactory.getLogger(OfficeToPdfUtil.class);
//
//    /**
//     * 锁
//     */
//    private static Lock lock = new ReentrantLock();
//
//    /**
//     * windows下openoffice安装地址
//     */
//    private static String windowsOpenOfficeUrl;
//    /**
//     * linux下openoffice安装地址
//     */
//    private static String linuxOpenOfficeUrl;
//    /**
//     * mac下opneoffice安装地址
//     */
//    private static String macOpenofficeUrl = "/Applications/OpenOffice.org.app/Contents/";
//
//    /**
//     * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件<br>
//     *
//     * @param inputFilePath 源文件路径，如："e:/test.docx"
//     * @return 转换后的图片地址
//     */
//    public static String officeToPdf(String inputFilePath) throws Exception {
//        OfficeManager officeManager;
//        try {
//            officeManager = getOfficeManager();
//            if (StringUtils.isEmpty(inputFilePath)) {
//                logger.info("输入文件地址为空，转换终止!");
//                return null;
//            }
//            File inputFile = new File(inputFilePath);
//            // 转换后的pdf文件路径
//            String outputFilePath_end = getOutputFilePath(inputFilePath);
//            if (!inputFile.exists()) {
//                logger.info("输入文件不存在，转换终止!");
//                return null;
//            }
//            // 连接OpenOffice
//            OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
//            return converterFile(inputFile, outputFilePath_end, inputFilePath, converter);
//        } catch (Exception e) {
//            logger.error("word转化pdf出错!", e);
//            throw e;
//        } finally {
//            //这里暂时不需要  getOfficeManager() 在这个方法已经控制
//            // officeManager.stop();
//        }
//    }
//
//    public static void stopOffice(OfficeManager getOfficeManager) {
//        try {
//            getOfficeManager.stop();
//            logger.info("openOffice停止--->>");
//            getOfficeManager.start();
//            logger.info("启动openOffice-->>");
//        } catch (Exception e) {
//            logger.info("openOffice停止失败 可能已经停止 异常信息：{}", e.getMessage());
//            //尝试启动
//            try {
//                getOfficeManager.start();
//            } catch (Exception ex) {
//                logger.info("openOffice启动失败  异常信息：{}", ex);
//                throw ex;
//            }
//
//        }
//
//
//    }
//
//    /**
//     * @author: zhangguoqing
//     * @date: 2018/9/19 14:03
//     * @param: [inputFilePath] word源文件路径 如："e:/test.docx"
//     * @return: java.util.List<java.lang.String> 转换后图片地址列表
//     * @Description: word转成图片
//     */
//    public static List<String> officeToImg(String inputFilePath) {
//        try {
//            //word转成pdf
//            String pdfFilePath = officeToPdf(inputFilePath);
//            //pdf转图片
//            List<String> iamgeFilePath = PdfToImageUtil.pdfToIamge(pdfFilePath);
//            for (String string : iamgeFilePath) {
//                logger.info("图片地址:" + string);
//            }
//            //删除pdf文件
//            new File(pdfFilePath).delete();
//            return iamgeFilePath;
//        } catch (Exception e) {
//            logger.error("word转化图片出错!", e);
//            return null;
//        }
//
//    }
//
//    /**
//     * 获取输出文件
//     *
//     * @param inputFilePath
//     * @return
//     */
//    public static String getOutputFilePath(String inputFilePath) {
//        String outputFilePath = inputFilePath.replaceAll("." + getPostfix(inputFilePath), ".pdf");
//        return outputFilePath;
//    }
//
//    /**
//     * 获取inputFilePath的后缀名，如："e:/test.pptx"的后缀名为："pptx"<br>
//     *
//     * @param inputFilePath
//     * @return
//     */
//    public static String getPostfix(String inputFilePath) {
//        return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
//    }
//
//    /**
//     * 连接OpenOffice.org 并且启动OpenOffice.org
//     *
//     * @return
//     */
//    static volatile boolean start = false;
//    private static OfficeManager OfficeManagerProcess;
//
//    public static OfficeManager getOfficeManager() {
//        DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
//        // 设置OpenOffice.org 3的安装目录
//        config.setOfficeHome(getOfficeHome());
//        // 启动OpenOffice的服务
//        if (!start) {
//            OfficeManager getOfficeManager = config.buildOfficeManager();
//            getOfficeManager.start();
//            start = true;
//            logger.info("执行任务前先启动-->>>");
//            OfficeManagerProcess = getOfficeManager;
//            return getOfficeManager;
//        } else {
//            logger.info("已经启动过了 返回启动过的Manager---->>>>>>>>>>");
//            if (OfficeManagerProcess == null) {
//                start = false;
//                return getOfficeManager();
//            }
//            return OfficeManagerProcess;
//        }
//
//    }
//
//    /**
//     * 根据操作系统的名称，获取OpenOffice.org 3的安装目录<br>
//     * 如我的OpenOffice.org 3安装在：C:/Program Files (x86)/OpenOffice.org 3<br>
//     *
//     * @return OpenOffice.org 3的安装目录
//     */
//    public static String getOfficeHome() {
//        String osName = System.getProperty("os.name");
//        logger.info("操作系统名称:" + osName);
//        if (Pattern.matches("Linux.*", osName)) {
//            return linuxOpenOfficeUrl;
//        } else if (Pattern.matches("Windows.*", osName)) {
//            return windowsOpenOfficeUrl;
//        } else if (Pattern.matches("Mac.*", osName)) {
//            return macOpenofficeUrl;
//        }
//        return null;
//    }
//
//    public static boolean checkLinuxSystem() {
//        String osName = System.getProperty("os.name");
//        logger.info("操作系统名称:" + osName);
//        if (Pattern.matches("Linux.*", osName)) {
//            return true;
//        }
//        return false;
//    }
//
//    /**
//     * @author: zhangguoqing
//     * @date: 2018/9/19 11:35
//     * @param: [inputFile, outputFilePath_end, inputFilePath, converter]
//     * @return: java.util.List<java.lang.String> 转换后的图片地址列表
//     * @Description: 文件转换
//     */
//    public static String converterFile(File inputFile, String outputFilePath_end, String inputFilePath,
//                                       OfficeDocumentConverter converter) throws Exception {
//        File outputFile = new File(outputFilePath_end);
//        // 假如目标路径不存在,则新建该路径
//        if (!outputFile.getParentFile().exists()) {
//            outputFile.getParentFile().mkdirs();
//        }
//        //判断转换文件的编码方式，如果不是UTF-8，则改为UTF-8编码
//        converter.convert(inputFile, outputFile);
//        logger.info("文件：" + inputFilePath + "\n转换为\n目标文件：" + outputFile + "\n成功!");
//        if (outputFile.isFile() && outputFile.exists()) {
//            return outputFilePath_end;
//        } else {
//            throw new Exception("转换的目标文件不存在 路径" + outputFilePath_end);
//        }
//    }
//
//
//    @Value("${officeToPdf.linuxOpenOfficeUrl}")
//    public void setLinuxOpenOfficeUrl(String linuxOpenOfficeUrl) {
//        OfficeToPdfUtil.linuxOpenOfficeUrl = linuxOpenOfficeUrl;
//    }
//
//    @Value("${officeToPdf.windowsOpenOfficeUrl}")
//    public void setWindowsOpenOfficeUrl(String windowsOpenOfficeUrl) {
//        OfficeToPdfUtil.windowsOpenOfficeUrl = windowsOpenOfficeUrl;
//    }
//
//
//}
